<?php

//function say($s) {
//    for ($i = 0; $i <5; $i ++) {
//        print_r($s . "\n");
//    }
//}
//
//Swoole\Coroutine\run(function () {
//    //子协程
//    Swoole\Coroutine::create(function () {
//        Swoole\Coroutine::sleep(.001);
//        say("hello, 协程id=". \Swoole\Coroutine::getCid()."，父协程id=". \Swoole\Coroutine::getPcid());
//    });
//    //主协程
//    say("world, 协程id=". \Swoole\Coroutine::getCid());
//});

function say($s) {
    Swoole\Coroutine::sleep(0.001);
    return $s;
}
//
//Swoole\Coroutine\run(function () {
//    $result = [];
//    $channel = new \Swoole\Coroutine\Channel();
//
//    \Swoole\Coroutine::create(function () use ($channel) {
//        $channel->push(say('hello'));
//    });
//
//    \Swoole\Coroutine::create(function () use ($channel) {
//        $channel->push(say('world'));
//    });
//
//    for ($i = 0; $i < 2; $i++) {
//        $result[] = $channel->pop();
//    }
//    var_dump($result);
//});

Swoole\Coroutine\run(function () {
    $channel = new \Swoole\Coroutine\Channel();

    // 子协程
    Swoole\Coroutine::create(function () use ($channel) {
        var_dump("协程任务执行[child]①");
        // Coroutine::sleep 模拟任务执行
        \Swoole\Coroutine::sleep(0.001);
        var_dump("协程结束执行[child]②");
        $channel->push(say("finish[by child]③"));
        var_dump("协程完成[child]④");
    });

    var_dump("协程开始[main]⑤");

    $result = $channel->pop();

    // 主协程
    var_dump("{$result}[main]⑥");
});